package cs;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import org.apache.log4j.Logger;

/**
 * 
 * Diese Klasse wird gleich beim Start der Projektes aufgerufen. Funktion dieser
 * ist das Anlegen der Datenbank und das Fuellen dieser mit Defaultwerte
 * 
 */

public class Startup {
	private static Logger log = Logger.getLogger(Startup.class);
	private String driverClass;
	private String user;
	private String password;
	private String defaultDBurl;
	private String newDB;

	public void initDB() {
		// attempt to create the user specified database
		String command;
		Connection db;
		Statement st;

		try {
			Class.forName(driverClass);
			db = DriverManager.getConnection(defaultDBurl, user, password);
			st = db.createStatement();

			try {
				log.info("Try to create database " + newDB);
				// create the user specified database. Assigned ownership to
				// user specified super user
				command = "CREATE DATABASE " + newDB
				// + "\" WITH OWNER = \"" + user +
				// "\" ENCODING = 'UTF-8' TABLESPACE = pg_default" // wird wohl
				// eher
				// für Postgres benötigt
				;
				log.info(command);
				st.execute(command);

				log.info("Creating database " + newDB + " successful!");
			} catch (Exception e) {
				log.info("Create database " + newDB
						+ " failed - it probably already exists.");
			}

			// Loeschen der Tabelle TypStatus und erneute Initialisierung dieser
			try {
				command = "drop table schneeberger.TypStatus";
				st.execute(command);
			} catch (Exception e) {
				log.info(e.getMessage());
			}

			try {
				command = "CREATE TABLE schneeberger.TypStatus (id INT(11) default NULL auto_increment, bezeichnung varchar(255) default NULL, PRIMARY KEY (id))";
				// command =
				// "CREATE TABLE schneeberger.TypStatus (id INT(11), bezeichnung varchar(255) default NULL, PRIMARY KEY (id))";
				st.execute(command);
			} catch (Exception e) {
				log.info(e.getMessage());
			}

			command = "insert into schneeberger.TypStatus (id, bezeichnung) values (1, 'belegt')";
			st.executeUpdate(command);
			command = "insert into schneeberger.TypStatus (id, bezeichnung) values (2, 'vielleicht verfügbar')";
			st.executeUpdate(command);
			command = "insert into schneeberger.TypStatus (id, bezeichnung) values (3, 'verfügbar')";
			st.executeUpdate(command);
			command = "insert into schneeberger.TypStatus (id, bezeichnung) values (4, 'Nicht verfügbar')";
			st.executeUpdate(command);

			st.close();
			db.close();

		} catch (Exception e1) {
			log.info(e1.getMessage());
		}
	}

	public void setDriverClass(String driverClass) {
		this.driverClass = driverClass;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setDefaultDBurl(String defaultDBurl) {
		this.defaultDBurl = defaultDBurl;
	}

	public void setNewDB(String newDB) {
		this.newDB = newDB;
	}
}
